import { getUserInfo, login, getUserMessage } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
// 数据
const state = {
  // 保存用户登录的token
  // Cookies版本
  token: getToken() || '',
  userInfo: {}
}
// 同步 必须通过mutations 来修改state里面的内容
const mutations = {
  // 保存token
  setToken(state, data) {
    state.token = data
    // 当前时间戳保存到本地
    localStorage.setItem('timeNow', Date.now())
    // Cookies版本
    setToken(data)
  },
  // 删除token
  removeToken(state) {
    removeToken()
    state.token = ''
  },
  // 保存用户数据
  setUserInfo(state, data) {
    // 断开引用地址, 获取一个全新的对象, 防止后续更改数据引起bug
    state.userInfo = { ...data }
  },
  // 删除用户数据
  removeUserInfo(state) {
    state.userInfo = ''
  }
}
// 异步
const actions = {
  // 登录请求 第一个参数是store本身  第二个是数据
  async logIn(store, data) {
    // 发起请求
    const res = await login(data)
    // //console.log(res)
    // 调用 mutations 第一个参数是自定义方法 第二个是参数
    store.commit('setToken', res)
  },
  // 获取用户数据请求
  async getUserInfo(store) {
    const res = await getUserInfo()
    // 根据id 获取员工基本信息
    const message = await getUserMessage(res.userId)
    // //console.log(res)
    store.commit('setUserInfo', { ...res, ...message })
  },
  // 退出登录
  logout(store) {
    store.commit('removeToken')
    store.commit('removeUserInfo')
    // 清理路由, 防止其他用户直接输入路由跳转到没有权限的页面
    resetRouter()
  }
}

export default {
  // 命名空间
  namespaced: true,
  state,
  mutations,
  actions
}
